package controller;

import entities.CD;
import entities.Persoon;
import entities.Uitlening;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import ui.UI;

public class Controller implements java.io.Serializable {

  private transient UI ui = null;
  private List<Persoon> personen = new ArrayList();
  private List<CD> cds = new ArrayList();
  //private List<Uitlening> uitleningen = new ArrayList();

  public Controller() {
  }

  public void setUI(UI ui) {
    this.ui = ui;
  }

  public List<Uitlening> getUitleningenVanPersoon(Persoon p) {
    return p.getUitleningen();
  }

  public List<CD> getCDs() {
    return cds;
  }

  public void maakPersoon(String naam) {
    //ja ja goed opletten he
    Persoon p = new Persoon(naam);
    personen.add(p);
  }

  //public List getPersonen() { }
  public List<Persoon> getPersonen() {
    return personen;
  }

  public void maakCD(String artiest, String titel) {
    CD c = new CD();
    c.setArtiest(artiest);
    c.setTitel(titel);
    cds.add(c);
  }

  //public List getCDs() { }
  public void maakUitlening(Persoon p, CD cd, String datum) {
    Uitlening u = new Uitlening(p, cd, datum);
    cd.setUitlening(u);
    //Bij Personen he !!
    p.addUitlening(u);
    //Het moet wel zo, want in de UML is er geen add-uitlening bij Persoon !!!
  }

  public Uitlening getUitleningVanCD(CD cd) {
    //return cd.getUitleningenVanCd();
    return cd.getUitlening();
  }

  public void verwijderUitlening(Uitlening uit) {
    //MOET NOG !!!
    uit.getCd().removeUitlening();
    Persoon p = uit.getPersoon();
    p.removeUitlening(uit);
  }

  public void saveAll() {
    try {
      // Write to disk with FileOutputStream
      FileOutputStream f_out = new FileOutputStream("myobject.data");

// Write object with ObjectOutputStream
      ObjectOutputStream obj_out = new ObjectOutputStream(f_out);

// Write object out to disk
      obj_out.writeObject(this);

    } catch (Exception e) {
      e.printStackTrace();
    }

  }

  public static Controller restore() {
    try {
      //NU OPENEN UIT HET BESTAND DAT DE VORIGE KEER MET SAVE_ALL WAS OPGESLAGEN !!
      //Als bestand is gevonden: openen etc, ander return null.
      //Want als je null return maakt UI een nieuw Controller automatisch.

      //Lees uit bestand
      FileInputStream f_in = new FileInputStream("myobject.data");

      //dinges
      ObjectInputStream obj_in = new ObjectInputStream(f_in);

      //Koekjes
      return (Controller) obj_in.readObject();
      //Hij return het object zoals het in het bestand staat zegmaar
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return null;
  }
}

